-- ------------------------------------------
-- Apuesta
-- Un cliente hace una apuesta por un partido.
-- ------------------------------------------

CREATE OR REPLACE FUNCTION Apuesta(param_idUsuario apuestas.idUsuario%TYPE,
                        param_monto     apuestas.monto%TYPE,
                        param_idPartido apuestas.idPartido%TYPE,
                        param_resultado apuestas.resultado%TYPE)
RETURNS void AS $$

        DECLARE
                partido partidos%ROWTYPE;
                usuario usuarios%ROWTYPE;

	BEGIN

                -- Seleccionar al user y partido
                SELECT INTO partido * FROM partidos WHERE idPartido = param_idPartido;
                SELECT INTO usuario * FROM usuarios WHERE idUsuario = param_idUsuario;

                -- Excepciones
                IF (partido IS NULL OR usuario IS NULL) THEN
                    RAISE EXCEPTION 'El usuario y/o partido no existe(n)';
                END IF;

                IF (param_monto <= 0) THEN
                    RAISE EXCEPTION 'El monto debe ser mayor que 0';
                END IF;

                IF (usuario.saldo < param_monto) THEN
                    RAISE EXCEPTION 'No hay saldo para realizar la apuesta';
                END IF;

                IF (partido.resultado IS NOT null) THEN
                    RAISE EXCEPTION 'El partido ya finalizo';
                END IF;


                IF (param_resultado < 1 OR param_resultado > 3) THEN
                    RAISE EXCEPTION 'El resultado puede ser 1, 2 o 3';
                END IF;

                --Insertar
                INSERT INTO apuestas (idUsuario      , monto      , idPartido      , resultado      , fecha)
                              VALUES (param_idUsuario, param_monto, param_idPartido, param_resultado, CURRENT_DATE);

	END;

$$ LANGUAGE plpgsql